import { defineStore } from 'pinia'
import { ref } from 'vue'
import request from '@/utils/request'
import { ElMessage } from 'element-plus'
import dayjs from 'dayjs' // 引入时间格式化工具

export const useUserStore = defineStore('user', () => {
    // 初始化为null，不设置默认值，避免覆盖后端数据
    const user = ref(null)

    // 1. 获取当前登录用户信息
    const fetchCurrentUserInfo = async () => {
        try {
            const res = await request.get('/user/info')
            if (res.code === 200) {
                user.value = res.data
                console.log('后端返回的用户原始数据：', res.data)
            } else {
                throw new Error(res.message || '获取用户信息失败')
            }
        } catch (err) {
            console.error('获取当前用户信息失败：', err)
            ElMessage.error(err.message || '获取用户信息失败，请稍后重试')
        }
    }

    // 2. 查询校区管理员
    const fetchPrincipalInfo = async (campusId) => {
        try {
            const res = await request.get('/user/admin_campus/info', {
                params: {
                    campusId,
                    userType: 'admin'
                }
            })
            if (res.code === 200) {
                console.log('校区管理员信息：', res.data)
                return res.data
            } else {
                throw new Error(res.message || '获取管理员信息失败')
            }
        } catch (err) {
            console.error('获取管理员信息失败：', err)
            ElMessage.error(err.message || '获取管理员信息失败，请稍后重试')
            return null
        }
    }

    // 3. 更新用户信息
    const updateUserInfo = async (newUserInfo) => {
        try {
            const res = await request.put('/user/update', newUserInfo)
            if (res.code === 200) {
                user.value = res.data
                ElMessage.success('用户信息更新成功')
                console.log('更新后的用户信息：', res.data)
            } else {
                throw new Error(res.message || '更新用户信息失败')
            }
        } catch (err) {
            console.error('更新用户信息失败：', err)
            ElMessage.error(err.message || '更新用户信息失败，请稍后重试')
        }
    }

    // 4. 添加修改密码方法（新增）
    const changePassword = async ({ oldPassword, newPassword }) => {
        // 前端基础验证
        if (!oldPassword || !newPassword) {
            throw new Error('原密码和新密码不能为空')
        }
        if (oldPassword === newPassword) {
            throw new Error('新密码不能与原密码相同')
        }
        if (newPassword.length < 6 || newPassword.length > 20) {
            throw new Error('新密码长度必须在6-20位之间')
        }

        try {
            const res = await request.post('/user/change-password', {
                oldPassword,
                newPassword
            })

            if (res.code === 200) {
                ElMessage.success('密码修改成功')
                return true
            } else {
                throw new Error(res.message || '修改密码失败')
            }
        } catch (err) {
            console.error('修改密码失败：', err)
            // 不在这里显示错误消息，让调用方处理
            throw new Error(err.message || '修改密码失败，请稍后重试')
        }
    }

    // 5. 登出方法（新增）
    const logout = () => {
        user.value = null
        // 清除本地存储的token（如果有）
        localStorage.removeItem('token')
        // 如果使用了cookie存储token，可以调用后端登出接口
        // request.post('/user/logout').catch(err => console.error('登出失败', err))
    }

    // 6. 辅助方法：格式化时间
    const formatCreateTime = () => {
        if (!user.value?.createTime) return '未知时间'
        return dayjs(user.value.createTime).format('YYYY-MM-DD HH:mm:ss')
    }

    // 7. 辅助方法：解析账号状态
    const getAccountStatus = () => {
        if (user.value?.status === undefined) return '未知状态'
        return user.value.status === 1 ? '正常' : '禁用'
    }

    return {
        user,
        fetchCurrentUserInfo,
        fetchPrincipalInfo,
        updateUserInfo,
        changePassword,  // 导出密码修改方法
        logout,          // 导出登出方法
        formatCreateTime,
        getAccountStatus
    }
})
